#include <stdio.h>  
#include <stdlib.h>  
#include <pthread.h>  
#include <unistd.h>  
  
// 线程将要执行的函数  
void* thread_function(void* arg) {  
    // 无限循环，直到被取消  
    while (1) {  
        // 在这里执行一些任务  
        printf("Thread is running...\n");  
        sleep(1); // 模拟耗时操作  
  
        // 检查是否有取消请求  
        pthread_testcancel();  
  
        // 实际上，对于简单的示例，我们可能不需要显式调用 pthread_testcancel()，  
        // 因为循环的每次迭代都可以视为一个“隐式”的取消点（尽管这不是严格的取消点）。  
        // 但为了演示目的，我们还是显式地调用了它。  
    }  
  
    // 注意：这个 return 语句实际上永远不会被执行，因为线程将被取消。  
    // 但如果我们有退出循环的其他方式（比如条件变量），则可能需要这个 return。  
    return NULL;  
}  
  
int main() {  
    pthread_t thread_id;  
    int ret;  
  
    // 创建一个新线程  
    ret = pthread_create(&thread_id, NULL, thread_function, NULL);  
    if (ret != 0) {  
        printf("pthread_create() failed\n");  
        exit(EXIT_FAILURE);  
    }  
  
    // 让主线程等待一段时间  
    sleep(5); // 假设我们想在5秒后取消线程  
  
    // 尝试取消线程  
    ret = pthread_cancel(thread_id);  
    if (ret != 0) {  
        printf("pthread_cancel() failed\n");  
        exit(EXIT_FAILURE);  
    }  
  
    // 等待线程终止（无论是正常终止还是被取消）  
    ret = pthread_join(thread_id, NULL);  
    if (ret != 0) {  
        printf("pthread_join() failed\n");  
        exit(EXIT_FAILURE);  
    }  
  
    printf("Thread has been canceled or exited\n");  
  
    return 0;  
}